<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/smap.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/smap.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/*</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> * Supervisor Mode Access Prevention support</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> *</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> * Copyright (C) 2012 Intel Corporation</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * Author: H. Peter Anvin &lt;hpa@linux.intel.com&gt;</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> *</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> * This program is free software; you can redistribute it and/or</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * modify it under the terms of the GNU General Public License</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> * as published by the Free Software Foundation; version 2</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * of the License.</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> */</span>
<a name="12" /><span class="True">      12:</span> 
<a name="13" /><span class="True">      13:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfU01BUF9IXzA_"><span class="b">_ASM_X86_SMAP_H</span></a>
<a name="14" /><span class="True">      14:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfU01BUF9IXzA_"><span class="b">_ASM_X86_SMAP_H</span></a>
<a name="15" /><span class="True">      15:</span> 
<a name="16" /><span class="True">      16:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">stringify</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="17" /><span class="True">      17:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">nops</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="18" /><span class="True">      18:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">cpufeature</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="k">/* &quot;Raw&quot; instruction opcodes */</span>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19BU01fQ0xBQ18w"><span class="b">__ASM_CLAC</span></a>    <span class="f">.</span><span class="b">byte</span> <span class="c">0x0f</span><span class="f">,</span><span class="c">0x01</span><span class="f">,</span><span class="c">0xca</span>
<a name="22" /><span class="True">      22:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19BU01fU1RBQ18w"><span class="b">__ASM_STAC</span></a>    <span class="f">.</span><span class="b">byte</span> <span class="c">0x0f</span><span class="f">,</span><span class="c">0x01</span><span class="f">,</span><span class="c">0xcb</span>
<a name="23" /><span class="True">      23:</span> 
<a name="24" /><span class="False">      24:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__ASSEMBLY__</span>
<a name="25" /><span class="False">      25:</span> 
<a name="26" /><span class="False">      26:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfMA__"><span class="b">alternative</span></a><span class="f">-</span><span class="m">asm</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="27" /><span class="False">      27:</span> 
<a name="28" /><span class="False">      28:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9TTUFQXzA_"><span class="b">CONFIG_X86_SMAP</span></a>
<a name="29" /><span class="False">      29:</span> 
<a name="30" /><span class="False">      30:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX0NMQUNfMA__"><span class="b">ASM_CLAC</span></a>                            \
<a name="31" /><span class="False">      31:</span>     <span class="c">661</span><span class="f">:</span> <a href="cpu.c_macros_ref.html#_QVNNX05PUDNfMA__"><span class="b">ASM_NOP3</span></a> <span class="f">;</span>                            \
<a name="32" /><span class="False">      32:</span>     <span class="f">.</span><span class="b">pushsection</span> <span class="f">.</span><span class="b">altinstr_replacement</span><span class="f">,</span> <span class="e">&quot;ax&quot;</span> <span class="f">;</span>            \
<a name="33" /><span class="False">      33:</span>     <span class="c">662</span><span class="f">:</span> <a href="cpu.c_macros_ref.html#_X19BU01fQ0xBQ18w"><span class="b">__ASM_CLAC</span></a> <span class="f">;</span>                        \
<a name="34" /><span class="False">      34:</span>     <span class="f">.</span><span class="b">popsection</span> <span class="f">;</span>                            \
<a name="35" /><span class="False">      35:</span>     <span class="f">.</span><span class="b">pushsection</span> <span class="f">.</span><span class="b">altinstructions</span><span class="f">,</span> <span class="e">&quot;a&quot;</span> <span class="f">;</span>                \
<a name="36" /><span class="False">      36:</span>     <span class="b">altinstruction_entry</span> <span class="c">661b</span><span class="f">,</span> <span class="c">662b</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfU01BUF8w"><span class="b">X86_FEATURE_SMAP</span></a><span class="f">,</span> <span class="c">3</span><span class="f">,</span> <span class="c">3</span> <span class="f">;</span>    \
<a name="37" /><span class="False">      37:</span>     <span class="f">.</span><span class="b">popsection</span>
<a name="38" /><span class="False">      38:</span> 
<a name="39" /><span class="False">      39:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX1NUQUNfMA__"><span class="b">ASM_STAC</span></a>                            \
<a name="40" /><span class="False">      40:</span>     <span class="c">661</span><span class="f">:</span> <a href="cpu.c_macros_ref.html#_QVNNX05PUDNfMA__"><span class="b">ASM_NOP3</span></a> <span class="f">;</span>                            \
<a name="41" /><span class="False">      41:</span>     <span class="f">.</span><span class="b">pushsection</span> <span class="f">.</span><span class="b">altinstr_replacement</span><span class="f">,</span> <span class="e">&quot;ax&quot;</span> <span class="f">;</span>            \
<a name="42" /><span class="False">      42:</span>     <span class="c">662</span><span class="f">:</span> <a href="cpu.c_macros_ref.html#_X19BU01fU1RBQ18w"><span class="b">__ASM_STAC</span></a> <span class="f">;</span>                        \
<a name="43" /><span class="False">      43:</span>     <span class="f">.</span><span class="b">popsection</span> <span class="f">;</span>                            \
<a name="44" /><span class="False">      44:</span>     <span class="f">.</span><span class="b">pushsection</span> <span class="f">.</span><span class="b">altinstructions</span><span class="f">,</span> <span class="e">&quot;a&quot;</span> <span class="f">;</span>                \
<a name="45" /><span class="False">      45:</span>     <span class="b">altinstruction_entry</span> <span class="c">661b</span><span class="f">,</span> <span class="c">662b</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfU01BUF8w"><span class="b">X86_FEATURE_SMAP</span></a><span class="f">,</span> <span class="c">3</span><span class="f">,</span> <span class="c">3</span> <span class="f">;</span>    \
<a name="46" /><span class="False">      46:</span>     <span class="f">.</span><span class="b">popsection</span>
<a name="47" /><span class="False">      47:</span> 
<a name="48" /><span class="False">      48:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* CONFIG_X86_SMAP */</span>
<a name="49" /><span class="False">      49:</span> 
<a name="50" /><span class="False">      50:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX0NMQUNfMA__"><span class="b">ASM_CLAC</span></a>
<a name="51" /><span class="False">      51:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX1NUQUNfMA__"><span class="b">ASM_STAC</span></a>
<a name="52" /><span class="False">      52:</span> 
<a name="53" /><span class="False">      53:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_X86_SMAP */</span>
<a name="54" /><span class="False">      54:</span> 
<a name="55" /><span class="True">      55:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* __ASSEMBLY__ */</span>
<a name="56" /><span class="True">      56:</span> 
<a name="57" /><span class="True">      57:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfMA__"><span class="b">alternative</span></a><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="58" /><span class="True">      58:</span> 
<a name="59" /><span class="True">      59:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9TTUFQXzA_"><span class="b">CONFIG_X86_SMAP</span></a>
<a name="60" /><span class="True">      60:</span> 
<a name="61" /><span class="True">      61:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="m">void</span> <span class="b">clac</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="62" /><span class="True">      62:</span> <span class="f">{</span>
<a name="63" /><span class="True">      63:</span>     <span class="k">/* Note: a barrier is implicit in alternative() */</span>
<a name="64" /><span class="True">      64:</span>     <a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfMA__"><span class="b">alternative</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVNNX05PUDNfMA__"><span class="b">ASM_NOP3</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X19zdHJpbmdpZnlfMA__"><span class="b">__stringify</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_X19BU01fQ0xBQ18w"><span class="b">__ASM_CLAC</span></a><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfU01BUF8w"><span class="b">X86_FEATURE_SMAP</span></a><span class="f">)</span><span class="f">;</span>
<a name="65" /><span class="True">      65:</span> <span class="f">}</span>
<a name="66" /><span class="True">      66:</span> 
<a name="67" /><span class="True">      67:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="m">void</span> <span class="b">stac</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="68" /><span class="True">      68:</span> <span class="f">{</span>
<a name="69" /><span class="True">      69:</span>     <span class="k">/* Note: a barrier is implicit in alternative() */</span>
<a name="70" /><span class="True">      70:</span>     <a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfMA__"><span class="b">alternative</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVNNX05PUDNfMA__"><span class="b">ASM_NOP3</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X19zdHJpbmdpZnlfMA__"><span class="b">__stringify</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_X19BU01fU1RBQ18w"><span class="b">__ASM_STAC</span></a><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfU01BUF8w"><span class="b">X86_FEATURE_SMAP</span></a><span class="f">)</span><span class="f">;</span>
<a name="71" /><span class="True">      71:</span> <span class="f">}</span>
<a name="72" /><span class="True">      72:</span> 
<a name="73" /><span class="True">      73:</span> <span class="k">/* These macros can be used in asm() statements */</span>
<a name="74" /><span class="True">      74:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX0NMQUNfMA__"><span class="b">ASM_CLAC</span></a> \
<a name="75" /><span class="True">      75:</span>     <a href="cpu.c_macros_ref.html#_QUxURVJOQVRJVkVfMA__"><span class="b">ALTERNATIVE</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVNNX05PUDNfMA__"><span class="b">ASM_NOP3</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X19zdHJpbmdpZnlfMA__"><span class="b">__stringify</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_X19BU01fQ0xBQ18w"><span class="b">__ASM_CLAC</span></a><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfU01BUF8w"><span class="b">X86_FEATURE_SMAP</span></a><span class="f">)</span>
<a name="76" /><span class="True">      76:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX1NUQUNfMA__"><span class="b">ASM_STAC</span></a> \
<a name="77" /><span class="True">      77:</span>     <a href="cpu.c_macros_ref.html#_QUxURVJOQVRJVkVfMA__"><span class="b">ALTERNATIVE</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVNNX05PUDNfMA__"><span class="b">ASM_NOP3</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X19zdHJpbmdpZnlfMA__"><span class="b">__stringify</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_X19BU01fU1RBQ18w"><span class="b">__ASM_STAC</span></a><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfU01BUF8w"><span class="b">X86_FEATURE_SMAP</span></a><span class="f">)</span>
<a name="78" /><span class="True">      78:</span> 
<a name="79" /><span class="False">      79:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* CONFIG_X86_SMAP */</span>
<a name="80" /><span class="False">      80:</span> 
<a name="81" /><span class="False">      81:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">clac</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="82" /><span class="False">      82:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">stac</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="83" /><span class="False">      83:</span> 
<a name="84" /><span class="False">      84:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX0NMQUNfMA__"><span class="b">ASM_CLAC</span></a>
<a name="85" /><span class="False">      85:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVNNX1NUQUNfMA__"><span class="b">ASM_STAC</span></a>
<a name="86" /><span class="False">      86:</span> 
<a name="87" /><span class="True">      87:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_X86_SMAP */</span>
<a name="88" /><span class="True">      88:</span> 
<a name="89" /><span class="True">      89:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __ASSEMBLY__ */</span>
<a name="90" /><span class="True">      90:</span> 
<a name="91" /><span class="True">      91:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_SMAP_H */</span>
<a name="92" /><span class="True">      92:</span> </pre>
  </body>
</html>
